'use strict';

const _  = require('lodash');

console.log('强制转换成数组', _.castArray(1));

console.log(_.attempt(function () {
    let t = {};
    t.a.b;
}));

console.log('程序没有因为方法调用报错而退出');

const obj = {
    name : 'obj',
    print: function () {
        console.log("使用bindAll可以快速的一个类似类对象的内容" + this.name);
    }
};
_.bindAll(obj);
obj.print();

console.log("constant", (_.constant("创建一个返回输入参数的函数"))());

console.log("flow合并多个函数为一个函数", (_.flow(_.add, Math.round))(1.2, 2.3));

//根据对象属性，返回一个过滤函数，可以用于filter等类似操作。
const matchesFunc = _.matches({id:1, name:'x'});
console.log('matches创建一个过滤的函数', matchesFunc({id:1, name:'x', desc: 'test'}),
    _.filter([{id:1, name:'x', desc: 'test'}, {id:2, name:'x', desc: 'test'}], matchesFunc));

//property 用于创建一个获取深层path上属性
const propertyFunc = _.property('a.b.c');
console.log('创建一个获取深层属性的方法', propertyFunc({a: {b: {c: 'test property'}}}));

//method 用于创建一个获取深层path上方法，并调用
const methodFunc = _.method('a.b.c');
console.log('创建一个获取深层方法并调用的方法', methodFunc({a: {b: {c: _.constant('test method')}}}));

//range 类似于python的range
console.log('range，类似于python的range', _.range(5));

//times 类似groovy的times和map的结合
console.log('times,类似groovy的times和map的结合。', _.times(5, t=>t**2));

console.log('uniqueId,不过分布式环境用不了,重启也不行，一次会话内地唯一。', _.uniqueId(), _.uniqueId('prefix-'));
